package com.only4play.practice.demo;


import com.huawei.it.eip.ump.client.config.TlsClientConfig;
import com.huawei.it.eip.ump.client.producer.Producer;
import com.huawei.it.eip.ump.client.producer.SendResult;
import com.huawei.it.eip.ump.common.exception.UmpException;
import com.huawei.it.eip.ump.common.message.Message;

import java.io.UnsupportedEncodingException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;


/**
 * @author mengdy
 */
public class ProducerTest {


    public static void main(String[] args) throws UmpException, UnsupportedEncodingException {
        Producer producer = new Producer();

        producer.setUmpNamesrvUrls("https://124.71.20.73:1443"); // 设置MQS的服务器地址
        producer.setAppId("dashi");             // 设置客户端账号
        producer.setAppSecret("ksnKeWpj5JXqDUXpszoDcA==");          // 设置客户端密钥
        producer.setTopic("T_DS_PARKING");     // 设置Topic Name
        producer.setEncryptTransport(true); // 设置是否需要加密传输。false（不加密）模式存在安全风险，建议使用true。

        producer.setTlsClientConfig(TlsClientConfig.builder()   //是否使用证书认证，若不需要证书认证请注释下一行代码
                .authServer(true)
                .trustCertPath("C:\\Users\\mengdy\\Desktop\\code\\practice-system\\practice-demo\\src\\main\\resources\\mqs_client_trustcert.pem")   //rocketmqClientTrustCert.pem所在目录
                .supportedProtocols("TLSv1.2")
                .supportedCipherSuites("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256")      //支持的加密套件
                .build());

        // producer.setTags("tag-xxx");    //此处设置的Tag为发布Topic时设置的Tag的子集或全集。当发布Topic时设置了Tag，此行必须设置；不填写本行代码，与设置值为*相同，代表所有的tag（仅当发布Topic不设置Tag时可进行）。
        producer.start();                                // 启动消息生产者，建议在应用程序启动时调用（即执行此代码）
        // 发送消息的业务逻辑
        Message message = new Message();
        message.setBusinessId("id-xxx");         // 设置消息业务标示，便于追踪消息轨迹
        message.setMessageGroupId("group1");    //当消息需要严格保证顺序消费时，将需要顺序消费的消息设置为相同的MessageGroupId
        message.setTags("tag-xxx");               // 此处设置的标签为producer.setTags("tag-xxx")中tag的单个子集。如果不填写本行代码就是不设置标签，消费端需要设置为*才能消费到本条消息；如果设置值为*，代表使用值为*的tag。
        LocalDateTime localdateTime = LocalDateTime.now();
        message.setBody(("body" + localdateTime.format(DateTimeFormatter.ISO_DATE_TIME)).getBytes("UTF-8")); // 消息体，推荐使用JSON.toJSONString(businessDo).getBytes("UTF-8") ，注：MQS不对二进制消息进行转换，Producer和Consumer需协商好序列化和反序列化方式
        try {
            SendResult sendResult = producer.send(message);
            if (sendResult.isSuccess()) {
                // 发送成功的逻辑处理
                System.out.println("成功了");
            } else {
                // 发送失败的逻辑处理
            }
        } catch (UmpException e) {
            System.out.println("异常了");
// 异常处理
        }
        producer.shutdown();        // 关闭消息生产者，建议在应用程序关闭的时候调用
    }
}
